package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * JDBC中的事务控制
 */
public class JDBCDemo14 {
    public static void main(String[] args) {
        try (Connection connection = DBUtil.getConnection();){
            //设置事务的隔离级别
            connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
            /*
                JDBC中事务是默认自动提交的.
                每当我们执行一条DML操作,就会自动COMMIT

                如果需要自行控制事务,需要先将自动提交关闭
             */
            connection.setAutoCommit(false);//关闭自动提交
            String sql = "INSERT INTO userinfo(username,password,nickname,age) " +
                         "VALUES(?,?,?,?)";
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1,"李四");
            ps.setString(2,"778877");
            ps.setString(3,"老四");
            ps.setInt(4,18);
            //事务的开启是自动的,当首次执行DML操作,事务就自动开启了
            int num = ps.executeUpdate();//执行完毕后不会自动提交事务了
            System.out.println(num>0?"添加成功":"添加失败");
//            connection.rollback();//无论执行commit还是rollback,当前事务都结束了
            connection.commit();
            //如果下面又执行新的SQL语句,那么会自动开启一个新的事务
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}







